package com.ousi.wx.service.Impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ousi.wx.dao.MediaDao;
import com.ousi.wx.service.MediaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MediaServiceImpl implements MediaService {

    @Autowired
    private MediaDao mediaDao;

    @Override
    public List<Map<Integer, Map<String, Object>>> selectProcessByProductId(Integer productId) {
        // 调用 Mapper 方法获取查询结果
        List<Map<String, Object>> resultList = mediaDao.selectProcessByProductId(productId);

        // 用于存储最终结果的列表
        List<Map<Integer, Map<String, Object>>> finalResult = new ArrayList<>();

        // 用于临时存储每个步骤 ID 对应的记录
        Map<Integer, Map<String, Object>> stepMap = new HashMap<>();

        for (Map<String, Object> record : resultList) {
            // 获取步骤 ID
            Integer stepId = (Integer) record.get("id");

            // 如果该步骤 ID 还没有对应的记录，则创建一个新的记录
            if (!stepMap.containsKey(stepId)) {
                Map<String, Object> stepRecord = new HashMap<>();
                stepRecord.put("mediaList", new ArrayList<Map<String, Object>>());
                stepMap.put(stepId, stepRecord);
            }

            // 获取当前步骤的记录
            Map<String, Object> stepRecord = stepMap.get(stepId);

            // 提取 detail 信息
            String detail = (String) record.get("detail");
            if (!stepRecord.containsKey("detail")) {
                stepRecord.put("detail", detail);
            }

            // 创建一个新的 Map 来存储当前记录的详细信息
            Map<String, Object> mediaDetailMap = new HashMap<>();
            for (Map.Entry<String, Object> entry : record.entrySet()) {
                if (!"id".equals(entry.getKey()) && !"detail".equals(entry.getKey())) {
                    mediaDetailMap.put(entry.getKey(), entry.getValue());
                }
            }

            // 将当前记录的详细信息添加到该步骤 ID 对应的 mediaList 中
            ((List<Map<String, Object>>) stepRecord.get("mediaList")).add(mediaDetailMap);
        }

        // 将每个步骤 ID 及其对应的记录添加到最终结果列表中
        for (Map.Entry<Integer, Map<String, Object>> entry : stepMap.entrySet()) {
            Map<Integer, Map<String, Object>> item = new HashMap<>();
            item.put(entry.getKey(), entry.getValue());
            finalResult.add(item);
        }

        return finalResult;
    }
}